const express = require('express')
const axios = require('axios')
const Router = express.Router()
const query = require('./db')
const { nyr } = require('../utils/tool')
const { chatEmitter } = require('../global/index')


module.exports = Router

// 获取聊天表情
Router.get('/face', async (req, res) => {
    try {
        let data = await query(`select * from face`)
        if (data.length === 0) {
            res.send({
                code: 400,
                msg: '没有表情'
            })
            return
        }
        res.send({
            code: 200,
            msg: '获取表情成功',
            data
        })
    } catch (error) {
        console.log(error);
        res.send({
            code: 0,
            error
        })
    }
})

// 获取留言板信息
Router.get('/leave', async (req, res) => {
    try {
        let { user_id, time } = req.query
        let data
        if (time) {
            data = await query(`select * from leavemessage join user on leavemessage.leave_from_user_id=user.user_id where leave_to_user_id=${user_id} and leave_time='${time}'`)
        } else {
            data = await query(`select * from leavemessage join user on leavemessage.leave_from_user_id=user.user_id where leave_to_user_id=${user_id} order by leave_id desc`)
        }

        if (data.length === 0) {
            res.send({
                code: 400,
                msg: '没有留言'
            })
            return
        }
        res.send({
            code: 200,
            msg: '获取留言板信息成功',
            data
        })
    } catch (error) {
        console.log(error);
        res.send({
            code: 0,
            error
        })
    }
})

// 留言
Router.post('/leaving', async (req, res) => {
    try {
        let { valueHtml, from_user_id, to_user_id } = req.body
        let data = await query(`insert into leavemessage values(${null},${from_user_id},${to_user_id},'${valueHtml}','${nyr(new Date(), '-')}')`)
        if (data) {
            res.send({
                code: 200,
                msg: '留言成功',
            })
        }
    } catch (error) {
        console.log(error);
        res.send({
            code: 0,
            error
        })
    }
})

// 封装请求ds接口的配置
async function createChatCompletion(messages) {
    const data = JSON.stringify({
        "messages": messages,    // 消息数组，每个消息包含角色和内容
        "model": "deepseek-chat",    // 模型名称
        "temperature": 0.7,  // 控制输出的随机性，0.0 表示完全确定，1.0 表示完全随机。
        "response_format": { "type": "text" },  // 响应格式，这里是文本格式。
        "max_tokens": 4096,  // 最大生成的令牌数。
        "top_p": 1,  // 用于控制文本生成的多样性，值越大表示生成的文本越多样化。
        "stream": true,  // 是否以流式方式返回响应。
    });

    // axios配置
    let config = {
        method: 'post',
        url: 'https://api.deepseek.com/chat/completions',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer sk-f9119a293f8041cd9a1080165b27276d`,
        },
        responseType: "stream",
        data: data
    };

    return { config };
}

// askDeepSeek
Router.get('/askDeepSeek', async (req, res) => {
    let messages = [
        { role: "user", content: req.query.message }
    ]

    let { config } = await createChatCompletion(messages)   //获取请求ds接口的配置
    let response = await axios(config)   //请求ds接口

    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');

    let answer = ''; // 完整的回答内容

    // 处理流式响应
    response.data.on('data', async (chunk) => {
        const lines = chunk.toString().split('\n'); // 将数据块转换为字符串并按行分割
        for (const line of lines) {
            if (line.trim() === '') continue; // 跳过空行
            if (line.trim() === 'data: [DONE]') {
                res.send(answer); // 发送完整的回答内容
            }
            // 以data:开头的才是有效数据
            if (line.startsWith('data:')) {
                try {
                    const json = JSON.parse(line.slice(6)); // 去掉前缀 "data: " 并解析 JSON
                    if (json.choices[0].delta.content) { // 检查是否有内容
                        answer += json.choices[0].delta.content;
                        // res.write(`data: ${JSON.stringify({ content: json.choices[0].delta.content })}\n\n`);
                        // chatEmitter.emit('chatDS', { content: json.choices[0].delta.content })
                    }
                } catch (e) {
                    // console.error('解析流式响应时出错:', e);
                    continue; // 如果解析失败，继续处理下一行
                }
            }
        }
    })
})